package com.vehicle.contract.service.impl;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;

import com.alibaba.nacos.common.utils.MD5Utils;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfWriter;
import com.vehicle.contract.domain.Contract;
import com.vehicle.contract.mapper.ContractMapper;
import com.vehicle.contract.service.IContractService;
import com.vehicle.contract.utils.HttpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.vehicle.contract.mapper.CarMapper;
import com.vehicle.contract.domain.Car;
import com.vehicle.contract.service.ICarService;


import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * 选择车辆Service业务层处理
 *
 * @author Mr.阚
 * @date 2025-03-28
 */
@Service
public class CarServiceImpl implements ICarService
{
    @Autowired
    private CarMapper carMapper;
    @Autowired
    private ContractMapper contractMapper;

    /**
     * 查询选择车辆
     *
     * @param id 选择车辆主键
     * @return 选择车辆
     */
    @Override
    public Car selectCarById(Long id)
    {
        return carMapper.selectCarById(id);
    }

    /**
     * 查询选择车辆列表
     *
     * @param car 选择车辆
     * @return 选择车辆
     */
    @Override
    public List<Car> selectCarList(Car car)
    {
        return carMapper.selectCarList(car);
    }

    /**
     * 新增选择车辆
     *
     * @param car 选择车辆
     * @return 结果
     */
    @Override
    public int insertCar(Car car)
    {
        return carMapper.insertCar(car);
    }

    /**
     * 修改选择车辆
     *
     * @param car 选择车辆
     * @return 结果
     */
    @Override
    public int updateCar(Car car)
    {
        return carMapper.updateCar(car);
    }

    /**
     * 批量删除选择车辆
     *
     * @param ids 需要删除的选择车辆主键
     * @return 结果
     */
    @Override
    public int deleteCarByIds(Long[] ids)
    {
        return carMapper.deleteCarByIds(ids);
    }

    /**
     * 删除选择车辆信息
     *
     * @param id 选择车辆主键
     * @return 结果
     */
    @Override
    public int deleteCarById(Long id)
    {
        return carMapper.deleteCarById(id);
    }

    @Override
    public int createContract(Contract contract) {

//        contract.setCarName(carMapper.selectCarById().getCarName());
        contract.setContractNumber("C" + System.currentTimeMillis());
        contract.setPartya("XXX");
        contract.setPartyb("XXX");
        String vin = "vin"+ System.currentTimeMillis();
       contract.setVehicleVin(vin);
        contract.setSignDate(new Date());
        contract.setStatus("未签订");
        contractMapper.insertContract(contract);
        return 1;
    }

    @Override
    public Optional<Contract> getContractById(Long id) {
        return Optional.ofNullable(contractMapper.selectContractById(id));
    }

    @Override
    public void generateContractPdf(Contract contract, String filePath) {
        // 创建一个新的 PDF 文档对象
        Document document = new Document();
        // 创建一个 PdfWriter 对象，用于将文档内容写入指定的文件输出流
        try {
            PdfWriter.getInstance(document,new FileOutputStream(filePath));
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        document.open();
        // 定义标题字体
        Font titleFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD, 20);
        // 定义普通字体
        Font normalFont = FontFactory.getFont(FontFactory.HELVETICA, 12);
        // 创建一个段落对象，用于显示标题
        Paragraph title =new Paragraph("合同详情",titleFont);
        // 设置标题居中显示
        title.setAlignment(Element.ALIGN_CENTER);

        try {
            // 将标题段落添加到文档中
            document.add(title);
            // 添加合同编号信息到文档中
            document.add(new Paragraph("合同编号: " + contract.getContractNumber(), normalFont));
            // 添加合同签订日期信息到文档中
            Date signDate = contract.getSignDate();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = sdf.format(signDate);
            document.add(new Paragraph("合同签订日期: " + format, normalFont));
            // 添加合同是否已签订信息到文档中
            document.add(new Paragraph("是否签订: " + (contract.getStatus().equals("已签订") ? "是" : "否"), normalFont));
            // 添加合同乙方信息到文档中
            document.add(new Paragraph("乙方: " + contract.getPartyb(), normalFont));
            // 添加合同甲方信息到文档中
            document.add(new Paragraph("甲方: " + contract.getPartya(), normalFont));
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        }

        // 关闭文档
        document.close();
    }

    @Override
    public Contract signContract(Long id) {
        // 根据合同的唯一标识从数据库中查找合同信息
        Optional<Contract> optionalContract = Optional.ofNullable(contractMapper.selectContractById(id));
        if (optionalContract.isPresent()) {
            Contract contract = optionalContract.get();
            // 设置合同为已签订状态
            contract.setStatus("已签订");
            // 更新合同的签订日期为当前时间
            contract.setSignDate(new Date());
            int i = contractMapper.insertContract(contract);

        }
        return null;
    }


}
